//
// Created by Lenovo on 2021/3/10.
//
typedef std::string ElemType;

typedef struct BiNode {
    ElemType data;
    int visitCount;
    bool flag = true;
    struct BiNode *lchild, *rchild;
} BiNode, *BiTree;

//创建二叉树
BiTree createBiTree() ;
//递归遍历实现
void orderTraverseTree(BiTree biTree, int traverseType);
//非递归遍历实现
void orderTraverseTreeForNot(BiTree biTree, int traverseType);
//层次遍历实现
void levelTraverseTree(BiTree biTree);

//算法题：
//1、复制二叉树
void copyTree(BiTree tree, BiTree &newTree);

//2、二叉树的高度
int getHighByTree(BiTree tree);

//二叉树的最大宽度
int getMaxWidthByTree(BiTree tree);

//3、叶子节点个数
int getLeaveNodeCountByTree(BiTree tree);

//二叉树是否为完全二叉树
bool isCompleteTree(BiTree tree);